/**
 * 增强showToast方法，增加onClose回调函数
 */
// interface iShowToastOptions {
//   /* ---------------------以下方法为原生的---------------*/
//   /**
//    * 提示的内容
//    */
//   title?: string;
//   /**
//    * 图标
//    * - success: 显示成功图标
//    * - loading: 显示加载图标
//    * - error: 显示错误图标
//    * - none: 不显示图标
//    */
//   icon?: 'success' | 'loading' | 'error' | 'none';
//   /**
//    * 自定义图标的本地路径，image 的优先级高于 icon
//    */
//   image?: string;
//   /**
//    * 提示的延迟时间，单位毫秒，默认：1500
//    */
//   duration?: number;
//   /**
//    * 纯文本轻提示显示位置，填写有效值后只有 title 属性生效
//    * - top: 居上显示
//    * - center: 居中显示
//    * - bottom: 居底显示
//    */
//   position?: 'top' | 'center' | 'bottom';
//   /**
//    * 是否显示透明蒙层，防止触摸穿透，默认：false
//    */
//   mask?: boolean;
//   /**
//    * 接口调用成功的回调函数
//    */
//   success?: (result: any) => void;
//   /**
//    * 接口调用失败的回调函数
//    */
//   fail?: (result: any) => void;
//   /**
//    * 接口调用结束的回调函数（调用成功、失败都会执行）
//    */
//   complete?: (result: any) => void;

//   /* ---------------------以下方法为增加的---------------*/
//   /**
//    * toast关闭后的回调函数，此方法是自定义的
//    */
//   onClose?: (result?: any) => void;
// }
// const origin_toast = uni.showToast;
// uni.showToast = params => {
//   origin_toast({
//     icon: 'none',
//     duration: params.duration,
//     ...params,
//   });
//   if (params.onClose) {
//     setTimeout(() => {
//       params.onClose();
//     }, params.duration || 1500);
//   }
// };

/**
 * 劫持uni的路由跳转方法，在跳转前，判断是否登录，
 * 如果没有登录，则跳转到登录页面
 * 如果登录了，则直接跳转
 */

const origin_natigateTo = uni.navigateTo;
const origin_navigateBack = uni.navigateBack;
const origin_redirectTo = uni.redirectTo;

const methods = ['navigateTo', 'switchTab', 'redirectTo'];

methods.forEach(method => {
  console.log('开始重写的路由方法');
  const originMethod = uni[method];
  uni[method] = (params, needLogin = false) => {
    if(!params || !params.url) {
      console.log('路由跳转方法参数错误');
      return
    }
    // 首先判断url是否为http，如果是的，则跳转到webview页面
    if (params.url.startsWith('http')) {
      const h5Url = params.url;
      params.url = `/subpackages/sub-home/pages/webview/index?url=${h5Url}`;
    }
    // 如果是跳转登录页面，则needLogin设置为false，避免循环跳转登录页面
    if (params.url.startsWith('/pages/login/login')) {
      needLogin = false;
    }
    console.log('重写后的路由方法');
    const isExceed = getCurrentPages().length >= 10;
    const token = uni.getStorageSync('token');
    // 需要登录校验，并且没有token的时候，则跳转到登录页面
    if (needLogin && !token) {
      console.log('重写后的路由方法, 跳转登录');

      // 排除登录页面
      const returnUrl = params.url.startsWith('/pages/login/login') ? '' : encodeURIComponent(params.url);
      const loginUrl = returnUrl ? `/pages/login/login?returnUrl=${returnUrl}` : '/pages/login/login';
      // 如果页面超出10个，则使用redirectTo来跳转
      isExceed
        ? origin_redirectTo({ url: loginUrl })
        : origin_natigateTo({
            url: loginUrl,
          });
    } else {
      // 如果页面超出10个，并且方法是navigateTo，则使用redirectTo来跳转
      if (isExceed && method === 'navigateTo') {
        return origin_redirectTo(params);
      }
      originMethod(params);
    }
  };
});

// 重写返回方法，当只有一个页面的时候，返回到首页，否则会出现点击返回无效的情况
uni.navigateBack = params => {
  const pages = getCurrentPages();
  if (pages.length === 1) {
    uni.switchTab({
      url: '/pages/index/index',
    });
  } else {
    origin_navigateBack(params);
  }
};
